/**
 * @author hzq
 * @date 2024-11-29 21:47:07
 * @description 文件工具类
 * @see https://juejin.cn/post/7418865171860914211
 * @status done
 */

/**
 * 文件工具类
 */
export default class FileUtils {
  /**
   * 通过 url 下载文件
   * @param url 文件地址
   * @param name 文件名
   */
  static downloadFileByUrl(url: string, name: string) {
    // 创建一个a标签
    const a = document.createElement('a')
    // 设置a标签的href属性为url
    a.href = url
    // 设置a标签的download属性为name
    a.download = name
    // 模拟点击a标签，下载文件
    a.click()
  }

  /**
   * 根据Blob对象下载文件
   * @param blob 文件
   * @param name 文件名
   */
  static downloadFileByBlob(blob: Blob, name: string) {
    // 创建一个a标签
    const a = document.createElement('a')
    // 将Blob对象转换为URL
    a.href = URL.createObjectURL(blob)
    // 设置下载文件名
    a.download = name
    // 模拟点击a标签，触发下载
    a.click()
  }

  /**
   * 将字节数转换，b 转 KB、mb、gb
   * @param bytes 字节数
   * @returns
   */
  static bytesToSize(bytes: number): string {
    // 如果字节数为0，则返回'0 B'
    if (bytes === 0) return '0 B'
    // 定义1024的常量
    const k = 1024
    // 定义大小单位数组
    const sizes = ['B', 'KB', 'MB', 'GB', 'TB']
    // 计算字节数的指数
    const i = Math.floor(Math.log(bytes) / Math.log(k))
    // 返回转换后的大小
    return (bytes / Math.pow(k, i)).toFixed(2) + ' ' + sizes[i]
  }
}
